package com.codeblock_;

/**
 * @Author 小闽
 * @Date 2024/9/7 16:57
 * @PackageName: com.codeblock_
 * @ClassName: CodeBlockDetail01
 * @Description: 代码块细节01
 * @Version 1.0
 */
public class CodeBlockDetail01 {
    public static void main(String[] args) {
        // 类加载的情况
        // 创建AA实例
//        AA aa = new AA();
        // 创建子类实例，父类对象也会被加载
        // 创建BB实例对象，则AA也会被执行,并且首先加载父类的静态代码块
        BB bb = new BB();
        // 使用类的静态属性或方法
        CC cc = new CC();
        System.out.println(cc.n1);
        CC.hello();
        //static代码块也叫静态代码块，作用就是对类进行初始化，而且随着类的加载而执行，并
        //且只会执行一次。如果是普通代码块，每创建一个对象，就执行。
        // 虽然实例化两个对象，但是因为DD中的代码块是静态代码块，所以只会执行一次
        DD dd = new DD();
        DD dd1 = new DD();
        // 当在静态代码块中定义警惕属属性时，去使用静态属性，静态代码块会被执行，而普通代码块不会被执行。
        System.out.println(DD.n1);


    }
}
class DD {
    // 创建一个静态属性
    public static int n1 = 600;
    // 静态代码块
    static{
        System.out.println("静态代码块DD被执行了...");
    }
    // 普通代码块
    {
        System.out.println("普通代码块DD被执行了...");
    }
}
class CC {
    public  static int n1 = 100;
    public static void hello(){
        System.out.println("CC类被执行...");
    }
    static {
        System.out.println("CC静态代码块被执行...");
    }
}
class BB extends AA{
    static {
        System.out.println("BB静态代码块被执行...");
    }
}
class AA{
    static {
        System.out.println("AA静态代码块被执行...");
    }
}
